package com.fenyin.samples.study.jdk.datastruct.stack;  
  
public class LinkedStack<V> {
	
	//栈顶
	private Entry top;
	
	//大小
	private int size;
	
	public LinkedStack(){
		top = new Entry(null);
		size= 0;
	}
	
	/**
	 * 查看堆栈顶部的对象，但不从堆栈中移除它。
	 */
	public V peek(){
		Entry<V> first = top.next;
		if(first == null){
			return null;
		}
		return first.value;
	}
	
	/**
	 * 移除堆栈顶部的对象，并作为此函数的值返回该对象。
	 */
	public V pop(){
		if(top.next == null){
			return null;
		}
		Entry<V> first = top.next;
		if(first == null){
			return null;
		}else{
			top.next = first.next;
			size--;
			return first.value;
		}
	}
	
	/**
	 * 把项压入堆栈顶部。
	 */
	public void push(V value){
		Entry<V> first = top.next;
		Entry<V> currt = new Entry<V>(value);
		currt.next = first;
	    top.next   = currt;
	    size++;
	}
	
	static class Entry<V>{
		//数据域
		V value;
		//指针域
		Entry next;
		
		Entry(V value){
			this.value = value;
		}
		
		public V getValue(){
			return value;
		}
	}
	
}
